﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Net;

namespace FonShare.Classes.FTP
{
    /// <summary>
    /// Test Class to connect to FTP Server.
    /// </summary>
    /// <author>spesme</author>
    /// <since>26/06/2009</since>
    public static class FS_FTPConnect
    {
        const string ftpServerIP = "111.111.111.111";
        const string ftpUserID = "userid";
        const string ftpPassword = "xxxx";

        /// <summary>
        /// Uploads the file.
        /// </summary>
        /// <param name="p_filename">The filename.</param>
        /// <author>spesme</author>
        /// <since>26/06/2009</since>
        public static void UploadFile(String p_filename)
        {
            FileInfo fileInf = new FileInfo(p_filename);
            string uri = "ftp://" + ftpServerIP + "/Disc-A1/" + fileInf.Name;
            FtpWebRequest reqFTP;

            // Create FtpWebRequest object from the Uri provided
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

            // Provide the WebPermission Credintials
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

            // By default KeepAlive is true, where the control connection is not closed
            // after a command is executed.
            reqFTP.KeepAlive = false;

            // Specify the command to be executed.
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

            // Specify the data transfer type.
            reqFTP.UseBinary = true;

            // Notify the server about the size of the uploaded file
            reqFTP.ContentLength = fileInf.Length;

            // The buffer size is set to 2kb
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;

            // Opens a file stream (System.IO.FileStream) to read the file to be uploaded
            FileStream fs = fileInf.OpenRead();

            try
            {
                // Stream to which the file to be upload is written
                Stream strm = reqFTP.GetRequestStream();

                // Read from the file stream 2kb at a time
                contentLen = fs.Read(buff, 0, buffLength);

                // Till Stream content ends
                while (contentLen != 0)
                {
                    // Write Content from the file stream to the FTP Upload Stream
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                }

                // Close the file stream and the Request Stream
                strm.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                //MessageBox.Show(ex.Message, "Upload Error");
                throw ex;
            }

        }

    }
}
